/**
 * Created by luyunstaff007 on 16-6-7.
 */
//必须要执行了backToTargetPageIfNeeded函数才能给该变量赋值
var lastPageKey = "lastShowedPage";
var shouldBackKey = "shouldBackTo";
var pageNaviKey = "pageNavi";
var isUserBackKey = "isUserBack";
var hostName = window.location.host;
var lastShowedPage = getValueFromCookie(lastPageKey);
var shouldBackTo = getValueFromCookie(shouldBackKey);
var pageNavi = getValueFromCookie(pageNaviKey);
if(pageNavi == ""){
    pageNavi = [];
}else{
    pageNavi = JSON.parse(pageNavi);
}
//如果是用户点击返回则该值为1，如果是这个js文件调用的back则该值为0
var isUserBack = getValueFromCookie(isUserBackKey);
if(isUserBack == ""){
    isUserBack = 1;
}
function saveValueToCookie(key, value) {
    document.cookie  = (key + '=' + value);
}
function getValueFromCookie(key) {
    if (document.cookie.length>0){　　//先查询cookie是否为空，为空就return ""
        var c_start = document.cookie.indexOf(key + "=");　//通过String对象的indexOf()来检查这个cookie是否存在，不存在就为 -1　　
        if (c_start!=-1){
            c_start=c_start + key.length+1;　　//最后这个+1其实就是表示"="号啦，这样就获取到了cookie值的开始位置
            var c_end=document.cookie.indexOf(";",c_start);　　//其实我刚看见indexOf()第二个参数的时候猛然有点晕，后来想起来表示指定的开始索引的位置...这句是为了得到值的结束位置。因为需要考虑是否是最后一项，所以通过";"号是否存在来判断
            if (c_end==-1) c_end=document.cookie.length;
            return decodeURI(document.cookie.substring(c_start,c_end));　　//通过substring()得到了值。想了解unescape()得先知道escape()是做什么的，都是很重要的基础，想了解的可以搜索下，在文章结尾处也会进行讲解cookie编码细节
        }
    }
    return "";
}
//判断是否是返回
function checkIsBack(){
    //如果是跳转，最后展示的页面一定是document.referrer，这种判断只有在没有循环跳转的情况下才能生效
    return !(lastShowedPage == "" || lastShowedPage == document.referrer);
}

function backToTargetPageIfNeeded(){
    //pageNavi每次返回就出栈
    if(checkIsBack()){
        if(shouldBackTo != ""){
            saveValueToCookie(shouldBackKey, "");
            var tmpBackTo = "";
            //如果没有hostname
            if(shouldBackTo.indexOf("http") <= -1){
                if(shouldBackTo.indexOf("/") == 0){
                    tmpBackTo = "http://" + hostName + shouldBackTo;
                }else{
                    tmpBackTo = "http://" + hostName + "/" + shouldBackTo;
                }
            }
            var backNum = 0;
            for(var i = 0; i < pageNavi.length; ++i){
                if(pageNavi[i] == tmpBackTo){
                    //因为是由后退触发的，因此当前已经是前一个页面了，所以要减1，又因为i是从0开始，因此需要再减1
                    backNum = i + 2 - pageNavi.length;
                    pageNavi.splice(i + 1, (pageNavi.length));
                    break;
                }
            }
            if(backNum != 0){
                saveValueToCookie(isUserBackKey, 0);
                window.history.go(backNum);
            }
        }else{
            //正常的返回
            if(isUserBack == 1){
                pageNavi.pop();
            }
            saveValueToCookie(isUserBackKey, 1);
        }
    }
    //pageNavi如果不是back则代表是push页面进来，每次跳转就入栈
    else{
        pageNavi.push(window.location.href);
    }
    saveValueToCookie(pageNaviKey, JSON.stringify(pageNavi));
    saveValueToCookie(lastPageKey, window.location.href);
}
backToTargetPageIfNeeded();